package com.yunji.news.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunji.news.entity.SystemConfig;

import java.util.List;
import java.util.Map;

/**
 * 系统配置服务接口
 *
 * @author yunji
 * @since 2024-11-25
 */
public interface SystemConfigService extends IService<SystemConfig> {

    /**
     * 分页查询配置列表
     *
     * @param page 分页参数
     * @param configGroup 配置分组
     * @param configKey 配置键
     * @return 分页结果
     */
    Page<SystemConfig> getConfigPage(Page<SystemConfig> page, String configGroup, String configKey);

    /**
     * 根据配置键获取配置值
     *
     * @param configKey 配置键
     * @return 配置值
     */
    String getConfigValue(String configKey);

    /**
     * 根据配置键获取配置值，如果不存在则返回默认值
     *
     * @param configKey 配置键
     * @param defaultValue 默认值
     * @return 配置值
     */
    String getConfigValue(String configKey, String defaultValue);

    /**
     * 根据配置分组获取配置列表
     *
     * @param configGroup 配置分组
     * @return 配置列表
     */
    List<SystemConfig> getConfigsByGroup(String configGroup);

    /**
     * 根据配置分组获取配置键值对
     *
     * @param configGroup 配置分组
     * @return 配置键值对
     */
    Map<String, String> getConfigMapByGroup(String configGroup);

    /**
     * 获取所有配置分组
     *
     * @return 配置分组列表
     */
    List<String> getConfigGroups();

    /**
     * 创建或更新配置
     *
     * @param systemConfig 配置信息
     * @return 是否成功
     */
    boolean saveOrUpdateConfig(SystemConfig systemConfig);

    /**
     * 批量更新配置
     *
     * @param configs 配置列表
     * @return 是否成功
     */
    boolean batchUpdateConfigs(List<SystemConfig> configs);

    /**
     * 删除配置
     *
     * @param id 配置ID
     * @return 是否成功
     */
    boolean deleteConfig(Long id);

    /**
     * 刷新配置缓存
     */
    void refreshCache();
}